home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d7 / bix.slt < prev    next >
Text File  |  1991-08-04  |  4KB  |  212 lines

  1. //
  2. //    bix.slt
  3. //
  4. //    A Telix SALT script for logging onto BIX through Tymnet.
  5. //
  6. //    D. H. Rifkind  1 Dec 89
  7. //
  8. //    This was originally part of a much longer "blink" script
  9. //    that logged on, captured all new messages and mail, and
  10. //    logged off again...in case you're wondering about the
  11. //    unnecessary complexity of things like errmsg() and
  12. //    conn_wait().
  13. //
  14.  
  15. //    Configuration parameters
  16.  
  17. str dialing_entry[] = "1";        // Dialing directory entry for BIX
  18. str user_name[] = "your_name";        // Your BIX user name
  19. int max_dial_retries = 5;        // Maximum times to redial (will hang
  20.                     //   up and try again on excessive line
  21.                     //   noise)
  22. int max_connect_retries = 25;        // Maximum times to retry connecting to
  23.                     //   BIX (if host busy)
  24.  
  25. //
  26. //    main
  27. //
  28.  
  29. main()
  30. {
  31.      int status;
  32.      int logged_on = 0;
  33.  
  34.      status = log_on();
  35.      return status;
  36. }
  37.  
  38.  
  39. //
  40. //    log_on
  41. //
  42. //    Dials Tymnet, negotiates through and logs on to BIX.
  43. //    Returns 1 on failure, 0 on success.
  44. //
  45.  
  46. log_on()
  47. {
  48.      int dial_retry, connect_retry;
  49.      int log_in_1, log_in_2, enter_name;
  50.      int line_noise_1, line_noise_2;
  51.      int bad_news;
  52.      int connect_wait, retry_pause;
  53.      int got_log_in;
  54.  
  55.      for (dial_retry = 0; dial_retry < max_dial_retries; ++dial_retry) {
  56.  
  57.       if (!carrier()) {
  58.            if (!dial(dialing_entry, 10, 1))
  59.             goto HANGUP_AND_RETRY;
  60.            delay_scr(5);
  61.            if (!carrier())
  62.             goto HANGUP_AND_RETRY;
  63.       }
  64.  
  65.       _local_echo = 1;        // Possibly got reset from directory
  66.  
  67.       track_free(0);
  68.       log_in_1 = track("log in: ", 0);
  69.       log_in_2 = track("user name: ", 0);
  70.       bad_news = track("system maintenance", 0);
  71.       enter_name = track("Name? ", 0);
  72.  
  73.       delay_scr(50);        // Wait out Tymnet garbage
  74.       cputc('a');            // Terminal identifier
  75.  
  76.       line_noise_1 = track("{", 0);    // Or enter your favorite line noise
  77.       line_noise_2 = track("~", 0);    //   characters here
  78.  
  79.       for (connect_retry = -1; connect_retry < max_connect_retries; ++connect_retry) {
  80.  
  81.            timer_free(0);
  82.            connect_wait = timer_start(300);
  83.            retry_pause = timer_start(50);
  84.  
  85.            for (got_log_in = 0;;) {
  86.             terminal();
  87.             if (time_up(connect_wait) || !carrier())
  88.              goto HANGUP_AND_RETRY;
  89.             if (track_hit(line_noise_1) || track_hit(line_noise_2))
  90.              goto HANGUP_AND_RETRY;
  91.             if (track_hit(bad_news)) {
  92.              waitfor("log in:", 30);
  93.              return errmsg("BIX is closed");
  94.             }
  95.             if (track_hit(log_in_1) || track_hit(log_in_2)) {
  96.              got_log_in = 1;
  97.              timer_restart(retry_pause, 50);
  98.             }
  99.             if (got_log_in) {
  100.              if (connect_retry < 0 || time_up(retry_pause))
  101.                   break;
  102.             }
  103.             if (track_hit(enter_name))
  104.              goto ENTER_USER_NAME;
  105.            }
  106.  
  107.            cputc('^H');        // Turn off Tymnet echo
  108.            xputs("bix^M");
  109.       }
  110.  
  111.       return errmsg("Can't get through to BIX");
  112.  
  113. ENTER_USER_NAME:
  114.  
  115.       xputs(user_name); xputc('^M');
  116.       if (!conn_wait("Password: ", 30))
  117.            goto HANGUP_AND_RETRY;
  118.       if (strlen(_entry_pass) != 0) {
  119.            printc('^M');
  120.            cputs(_entry_pass); cputc('^M');
  121.       }
  122.  
  123.       track_free(0);        // No sense tracking that stuff now
  124.       return 0;
  125.  
  126. HANGUP_AND_RETRY:
  127.  
  128.       if (carrier()) {
  129.            if (!hangup())
  130.             return 1;
  131.       }
  132.      }
  133.  
  134.      return errmsg("No response from Tymnet");
  135. }
  136.  
  137.  
  138. //
  139. //    errmsg
  140. //
  141. //    Displays an error message on the screen.  Returns 1
  142. //    so that it can be used like:
  143. //
  144. //        return errmsg("Modem caught fire");
  145. //
  146.  
  147. errmsg(str msg)
  148. {
  149.      printsc("^M^J*** ");
  150.      prints(msg);
  151.      return 1;
  152. }
  153.  
  154.  
  155. //
  156. //    xputs
  157. //
  158. //    Writes a string both to the screen and the serial port.
  159. //
  160.  
  161. xputs(str s)
  162. {
  163.      printsc(s);
  164.      cputs(s);
  165. }
  166.  
  167.  
  168. //
  169. //    xputc
  170. //
  171. //    Writes a single character to the screen and serial port.
  172. //
  173.  
  174. xputc(int c)
  175. {
  176.      printc(c);
  177.      cputc(c);
  178. }
  179.  
  180.  
  181. //
  182. //    conn_wait
  183. //
  184. //    Like waitfor(), but fails if the connection is lost.
  185. //
  186.  
  187. conn_wait(str s, int t)
  188. {
  189.      int track_s;
  190.      int timer_t;
  191.      int success = 0;
  192.  
  193.      // Cautious use of timer and track handles.
  194.  
  195.      track_s = track(s, 0);
  196.      timer_t = timer_start(t * 10);
  197.  
  198.      do {
  199.       terminal();
  200.       if (!carrier() || time_up(timer_t))
  201.            break;
  202.      } while ((success = track_hit(track_s)) == 0);
  203.  
  204.      track_free(track_s);
  205.      timer_free(timer_t);
  206.  
  207.      return success;
  208. }
  209.  
  210.  
  211. // End of bix.slt
  212.